#ifndef __COM_DEBUG_H__
#define __COM_DEBUG_H__

#include "esp_log.h"
#include <stdio.h>
#include <string.h>

extern char flie_line[30];

// 输出文件路径时，只保留最后的文件名【strrchr函数】
#define FILE_NAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)

// 开发环境，调试使用的宏定义
#define DEBUG_DEVELOPMENT

#ifdef DEBUG_DEVELOPMENT

// 保留了tag参数 + 文件名:行号 的打印
#define HZD_LOGI(tag, format, ...) ESP_LOGI(tag, "[%s:%d] " format, FILE_NAME, __LINE__, ##__VA_ARGS__)
#define HZD_LOGW(tag, format, ...) ESP_LOGW(tag, "[%s:%d] " format, FILE_NAME, __LINE__, ##__VA_ARGS__)
#define HZD_LOGE(tag, format, ...) ESP_LOGE(tag, "[%s:%d] " format, FILE_NAME, __LINE__, ##__VA_ARGS__)

// 使用文件名:行号 替代LOG中tag的打印
#define MY_LOGI(format, ...)                                \
    {                                                       \
        sprintf(flie_line, "[%s:%d]", FILE_NAME, __LINE__); \
        ESP_LOGI(flie_line, format, ##__VA_ARGS__);         \
    }
#define MY_LOGW(format, ...)                                \
    {                                                       \
        sprintf(flie_line, "[%s:%d]", FILE_NAME, __LINE__); \
        ESP_LOGW(flie_line, format, ##__VA_ARGS__);         \
    }
#define MY_LOGE(format, ...)                                \
    {                                                       \
        sprintf(flie_line, "[%s:%d]", FILE_NAME, __LINE__); \
        ESP_LOGE(flie_line, format, ##__VA_ARGS__);         \
    }

#else
#define HZD_LOGI(tag, format, ...)
#define HZD_LOGW(tag, format, ...)
#define HZD_LOGE(tag, format, ...)
#define MY_LOGI(format, ...)
#define MY_LOGW(format, ...)
#define MY_LOGE(format, ...)

#endif // DEBUG

#endif /* __COM_DEBUG_H__ */
